What are the three main components of an embedded systems